package org.terramagnet.workflow.dynamic.workflow;

import java.util.HashMap;
import java.util.Map;
import org.terramagnet.workflow.dynamic.Work;

/**
 * 使用Tree模式封装工作任务节点.
 *
 * @author terrason
 */
public class TreeNode {

    /**
     * 实际工作任务.
     */
    private Work work;
    /**
     * 节点名称.
     */
    private String name;
    /**
     * 前置节点.
     */
    private final Map<String, TreeNode> prev = new HashMap<String, TreeNode>();
    /**
     * 后置节点.
     */
    private final Map<String, TreeNode> next = new HashMap<String, TreeNode>();

    /**
     * 增加前置节点. <strong>会进行双向绑定。</strong>
     */
    public void addPrevNode(TreeNode node) {
        prev.put(node.getName(), node);
        node.next.put(this.name, this);
    }

    /**
     * 增加后置节点. <strong>会进行双向绑定。</strong>
     */
    public void addNextNode(TreeNode node) {
        next.put(node.getName(), node);
        node.prev.put(this.name, this);
    }

    /**
     * 实际工作任务.
     *
     * @return the work
     */
    public Work getWork() {
        return work;
    }

    /**
     * 实际工作任务.
     *
     * @param work the work to set
     */
    public void setWork(Work work) {
        this.work = work;
    }

    /**
     * 节点名称.
     *
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * 节点名称.
     *
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 前置节点.
     *
     * @return the prev
     */
    public Map<String, TreeNode> getPrev() {
        return prev;
    }

    /**
     * 后置节点.
     *
     * @return the next
     */
    public Map<String, TreeNode> getNext() {
        return next;
    }
    /**
     * 该节点是否容器类节点.
     */
    public boolean isContainer() {
        return false;
    }

    /**
     * 是否为异步任务.
     */
    public boolean isAsynchronous() {
        return false;
    }
}
